/*
 * Pajaro.cpp
 *
 *  Created on: 16/10/2012
 *      Author: Ignacio Galvez
 */
#define G 10.0
#include "Pajaro.h"
#include <cmath>
#include <iostream>

Pajaro::Pajaro(double anguloDeCaida, double normaVelocidadInicial,
		double puntosDeVida, double x, double y,double tiempoInicial): 
		Daniable(puntosDeVida), anguloDeCaida(anguloDeCaida),
		normaVelocidadInicial(normaVelocidadInicial), posicionX(x),
		 posicionY(y), xInicial(x), yInicial(y), 
		 tiempoInicial(tiempoInicial) {}

double Pajaro::DANIO_HUEVO_BLANCO = 1;
double Pajaro::DANIO_HUEVO_CODORNIZ = 0.5;
double Pajaro::DANIO_HUEVO_POCHE = 1;
double Pajaro::DANIO_HUEVO_RELOJ = 1;
double Pajaro::EXPLOSION_HUEVO_BLANCO = 0.5;
void Pajaro::serDaniadoPorPajaroRojo() {}
void Pajaro::serDaniadoPorPajaroVerde() {}
void Pajaro::serDaniadoPorPajaroAzul() {}
void Pajaro::serDaniadoPorHuevoBlanco() {
disminuirPuntosDeVida( DANIO_HUEVO_BLANCO);
}
void Pajaro::serDaniadoPorHuevoCodorniz() {
disminuirPuntosDeVida( DANIO_HUEVO_CODORNIZ);
}
void Pajaro::serDaniadoPorHuevoPoche() {
disminuirPuntosDeVida(DANIO_HUEVO_POCHE);
}
void Pajaro::serDaniadoPorHuevoReloj() {
disminuirPuntosDeVida(DANIO_HUEVO_RELOJ);
}

void Pajaro::recibirExplosionHuevoBlanco() {
	disminuirPuntosDeVida(EXPLOSION_HUEVO_BLANCO);
}

double Pajaro::getTiempoInicial() {
	return tiempoInicial;
}

double Pajaro::getNormaVelocidadInicial() {
	return normaVelocidadInicial;
}


double Pajaro::getAnguloDeCaida(){
	return anguloDeCaida;
}
void Pajaro::setAnguloCaida(double angulo){
anguloDeCaida = angulo;
}
void   Pajaro::modificarVelocidadInicial(double factor, double VO) {
	const double velocidadMinima = 10;
	if (VO * factor >= velocidadMinima) normaVelocidadInicial = VO * factor;
	else normaVelocidadInicial = 0;
}

double Pajaro::getPosicionX() {
	return posicionX;
}

double Pajaro::getPosicionY() {
	return posicionY;
}

void Pajaro::setPosicionX(double x) {
	posicionX = x;
}

void Pajaro::setPosicionY(double y) {
	posicionY = y;
}


void Pajaro::setTiempoInicial(double tiempo) {
	tiempoInicial = tiempo;
}

void Pajaro::mover(double ticks) {
	//char c;
	const double ALTURA_MAXIMA = 600;
	const double BORDE_DERECHO = 900;
	const double BORDE_IZQUIERDO = 0;
	const double PISO = 0;
	std::cout << "normaVelocidadInicial"<<normaVelocidadInicial<<std::endl;
	double x = xInicial + normaVelocidadInicial * cos(anguloDeCaida) *
		 (ticks - tiempoInicial);
	double y = yInicial + normaVelocidadInicial *	sin(anguloDeCaida) * 
		(ticks - tiempoInicial) - 0.5 * G * pow((ticks - tiempoInicial), 2);
	if ((x > BORDE_DERECHO)||(x < BORDE_IZQUIERDO)||(y > ALTURA_MAXIMA)||
		(y < PISO)||(normaVelocidadInicial == 0))
		impactar();
	else {
		std::cout << "moviendo pajaro x = " << x << "y = "<<y<<std::endl;
		setPosicionX(x);
		setPosicionY(y);
	}
}

void   Pajaro::setXinicial(double xInicial) {
	this->xInicial = xInicial;
}

void   Pajaro::setYinicial(double yInicial) {
	this->yInicial = yInicial;
}
double Pajaro::getXinicial() {
	return xInicial;
}

double Pajaro::getYinicial() {
	return yInicial;
}

Pajaro::~Pajaro() {}


